//package chapter01.source02;
//
//import java.awt.*;
//import javax.swing.*;
//import javax.swing.filechooser.filenameextensionfilter;
//import javax.swing.undo.undomanager;
//import java.awt.event.*;
//import java.io.*;
//
///**
// *
// * @author cjbi@outlook.com
// * @created 2015年7月6日 上午11:22:24
// */
//public class jnotepad extends jframe implements actionlistener {
//
//    jmenubar menubar = new jmenubar();
//    jmenu file = new jmenu("文件(f)");
//    jmenu edit = new jmenu("编辑(e)");
//    jmenu format = new jmenu("格式(o)");
//    jmenu help = new jmenu("帮助(h)");
//    jmenuitem create = new jmenuitem("新建");
//    jmenuitem open = new jmenuitem("打开...");
//    jmenuitem save = new jmenuitem("保存");
//    jmenuitem saveas = new jmenuitem("另存为...");
//    jmenuitem exit = new jmenuitem("退出");
//    jmenuitem undo = new jmenuitem("撤销");
//    jmenuitem cut = new jmenuitem("剪切");
//    jmenuitem copy = new jmenuitem("复制");
//    jmenuitem paste = new jmenuitem("粘贴");
//    jmenuitem findrep = new jmenuitem("查找替换");
//    jmenuitem selectall = new jmenuitem("全选");
//    jmenuitem font = new jmenuitem("字体");
//    jmenuitem about = new jmenuitem("关于");
//    jmenuitem cut2 = new jmenuitem("剪切(x)");
//
//    jmenuitem copy2 = new jmenuitem("复制(c)");
//    jmenuitem paste2 = new jmenuitem("粘贴(v)");
//    jmenuitem selectall2 = new jmenuitem("全选(a)");
//    public static jtextarea textarea = new jtextarea();
//    undomanager um = new undomanager();
//    jscrollpane scroll = new jscrollpane(textarea, scrollpaneconstants.vertical_scrollbar_always, scrollpaneconstants.horizontal_scrollbar_as_needed);
//    jpopupmenu popup = new jpopupmenu();
//    string pathselect;
//
//    // 获取屏幕尺寸
//    dimension screensize = toolkit.getdefaulttoolkit().getscreensize();
//
//    public jnotepad() {
//
//        // 此处定义键盘快捷键
//        // menubar
//        file.setmnemonic(keyevent.vk_f);
//        edit.setmnemonic(keyevent.vk_e);
//        format.setmnemonic(keyevent.vk_o);
//        help.setmnemonic(keyevent.vk_h);
//        // menuitem
//        create.setaccelerator(keystroke.getkeystroke(keyevent.vk_n, actionevent.ctrl_mask));
//        open.setaccelerator(keystroke.getkeystroke(keyevent.vk_o, actionevent.ctrl_mask));
//        save.setaccelerator(keystroke.getkeystroke(keyevent.vk_s, actionevent.ctrl_mask));
//        undo.setaccelerator(keystroke.getkeystroke(keyevent.vk_z, actionevent.ctrl_mask));
//        cut.setaccelerator(keystroke.getkeystroke(keyevent.vk_x, actionevent.ctrl_mask));
//        copy.setaccelerator(keystroke.getkeystroke(keyevent.vk_c, actionevent.ctrl_mask));
//        paste.setaccelerator(keystroke.getkeystroke(keyevent.vk_v, actionevent.ctrl_mask));
//        findrep.setaccelerator(keystroke.getkeystroke(keyevent.vk_f, actionevent.ctrl_mask));
//        selectall.setaccelerator(keystroke.getkeystroke(keyevent.vk_a, actionevent.ctrl_mask));
//
//        // 事件监听者
//        save.addactionlistener(this);
//        create.addactionlistener(this);
//        open.addactionlistener(this);
//        saveas.addactionlistener(this);
//        exit.addactionlistener(this);
//        undo.addactionlistener(this);
//        cut.addactionlistener(this);
//        copy.addactionlistener(this);
//        paste.addactionlistener(this);
//        selectall.addactionlistener(this);
//        font.addactionlistener(this);
//        about.addactionlistener(this);
//        cut2.addactionlistener(this);
//        copy2.addactionlistener(this);
//        paste2.addactionlistener(this);
//        selectall2.addactionlistener(this);
//        findrep.addactionlistener(this);
//        // 设置撤销文本的管理器
//        textarea.getdocument().addundoableeditlistener(um);
//        textarea.setfont(format.font);
//        // 文件
//        file.add(create);
//        file.add(open);
//        file.add(save);
//        file.add(saveas);
//        file.addseparator();
//        file.add(exit);
//
//        // 编辑
//        edit.add(undo);
//        edit.addseparator();
//        edit.add(cut);
//        edit.add(copy);
//        edit.add(paste);
//        edit.addseparator();
//        edit.add(findrep);
//        edit.addseparator();
//        edit.add(selectall);
//
//        // 格式
//        format.add(font);
//
//        // 帮助
//        help.add(about);
//
//        // 菜单栏
//        menubar.add(file);
//        menubar.add(edit);
//        menubar.add(format);
//        menubar.add(help);
//
//        // 右键菜单
//        popup.add(cut2);
//        popup.add(copy2);
//        popup.add(paste2);
//        popup.addseparator();
//        popup.add(selectall2);
//
//        // 添加到文本域容器
//        textarea.add(popup);
//
//        // 匿名内部类监听器右键动作
//        textarea.addmouselistener(new mouseadapter() {
//            public void mousereleased(mouseevent e) {
//                if (e.getbutton() == mouseevent.button3) {
//                    popup.show(textarea, e.getx(), e.gety());
//                }
//            }
//        });
//
//        // 边界布局
//        this.add(menubar, borderlayout.north);
//        this.add(scroll, borderlayout.center);
//        this.settitle("记事本");
//        this.setsize(500, 400);
//        this.setlocationrelativeto(null);
//        this.seticonimage(new imageicon(this.getclass().getresource("/icon/notepad.png")).getimage());//图标放在源目录的icon文件夹
//        this.setdefaultcloseoperation(jframe.dispose_on_close);
//        this.setvisible(true);
//
//    }
//
//    // 重写actionperformed
//    @override
//    public void actionperformed(actionevent e) {
//        // event对象发生源
//        if (e.getsource() == open) {
//
//            jfilechooser chooser = new jfilechooser();
//            filenameextensionfilter filter = new filenameextensionfilter("文本文档(*.txt)", "txt");
//            chooser.setfilefilter(filter);
//            chooser.setdialogtitle("文件打开");
//            chooser.showopendialog(null);
//            chooser.setvisible(true);
//
//            try {
//                pathselect = chooser.getselectedfile().getpath();
//                filereader wjl = new filereader(pathselect);
//                bufferedreader hcl = new bufferedreader(wjl);
//                string s = "", zfc = "";
//                while ((s = hcl.readline()) != null) {
//                    zfc += (s + "\n");
//                }
//                textarea.settext(zfc);
//
//            } catch (exception e1) {
//            }
//        }
//
//        if (e.getsource() == saveas) {// 另存为
//
//            jfilechooser chooser = new jfilechooser();
//            filenameextensionfilter filter = new filenameextensionfilter("文本文档(*.txt)", "txt");
//            chooser.setfilefilter(filter);
//            chooser.setdialogtitle("另存为");
//            chooser.showsavedialog(null);
//            chooser.setvisible(true);
//
//            printstream ps;
//            try {
//                string select = chooser.getselectedfile().getpath();
//                ps = new printstream(select);
//                system.setout(ps);
//                system.out.println(this.textarea.gettext());
//
//            } catch (exception e1) {
//            }
//        }
//
//        if (e.getsource() == save && (pathselect == null)) {// 保存
//            jfilechooser chooser = new jfilechooser();
//
//            chooser.setdialogtitle("保存");
//            chooser.showsavedialog(null);
//            chooser.setvisible(true);
//
//            printstream ps;
//            try {
//                pathselect = chooser.getselectedfile().getpath();
//                ps = new printstream(pathselect);
//                system.setout(ps);
//                system.out.println(this.textarea.gettext());
//
//            } catch (exception e1) {
//            }
//        } else if (e.getsource() == save && !(pathselect == null)) {
//            printstream ps;
//            try {
//                ps = new printstream(pathselect);
//                system.setout(ps);
//                system.out.println(this.textarea.gettext());
//            } catch (filenotfoundexception e1) {
//            }
//        }
//
//        if (e.getsource() == create) {
//            textarea.settext("");
//            pathselect = null;
//        }
//
//        if (e.getsource() == exit) {
//            system.exit(0);
//        }
//
//        if (e.getsource() == undo) {
//            if (um.canundo()) {
//                um.undo();
//            }
//        }
//
//        if (e.getsource() == cut || e.getsource() == cut2) {
//            textarea.cut();
//        } else if (e.getsource() == copy || e.getsource() == copy2) {
//            textarea.copy();
//        } else if (e.getsource() == paste || e.getsource() == paste2) {
//            textarea.paste();
//        } else if (e.getsource() == findrep) {
//            new findandreplace(textarea);
//        }
//
//        else if (e.getsource() == selectall || e.getsource() == selectall2) {
//            textarea.selectall();
//        }
//        if (e.getsource() == font) {
//            new format(textarea);
//        }
//        if (e.getsource() == about) {
//            new about();
//        }
//
//    }
//
//    public static void main(string[] args) {
//        new jnotepad();
//    }
//
//}
//
//class findandreplace extends jdialog implements actionlistener {// 查找和替换
//    jlabel findlabel = new jlabel("查找内容：");
//    jlabel replabel = new jlabel(" 替换为：");
//    jtextfield findtf = new jtextfield(8);
//    jtextfield reptf = new jtextfield(8);
//    jbutton findbtn = new jbutton("查找");
//    jbutton repbtn = new jbutton("替换");
//    jpanel findpn = new jpanel();
//    jpanel reppn = new jpanel();
//    jtextarea textarea;
//
//    string text;
//    boolean flg = false;
//    int len;
//    int start = 0;
//    int k = 0;
//
//    public findandreplace(jtextarea textarea) {
//
//        this.textarea = textarea;
//
//        findpn.add(findlabel);
//        findpn.add(findtf);
//        findpn.add(findbtn);
//        reppn.add(replabel);
//        reppn.add(reptf);
//        reppn.add(repbtn);
//        this.add(findpn);
//        this.add(reppn);
//
//        findbtn.addactionlistener(this);
//        repbtn.addactionlistener(this);
//
//        this.settitle("查找和替换");
//        this.setlayout(new gridlayout(2, 1));
//        // this.setbounds(400, 200, 300, 140);
//        this.pack();
//        this.setlocationrelativeto(null);
//        this.setresizable(false);
//        this.setvisible(true);
//        this.setdefaultcloseoperation(jdialog.dispose_on_close);
//    }
//
//    @suppresswarnings("deprecation")
//    public void actionperformed(actionevent e) {
//        string findtext = findtf.gettext();
//        string reptext = reptf.gettext();
//        text = textarea.gettext();
//        if (e.getsource() == findbtn) {
//            findbtn.setlabel("下一个");
//            if (findtext != null) {
//                len = findtext.length();
//                start = text.indexof(findtext, k);
//                k = start + len;
//                textarea.select(start, start + len);
//                flg = true;
//                if (start == -1) {
//                    joptionpane.showmessagedialog(null, "已到文件尾部！", "提示", joptionpane.information_message);
//                    start = 0;
//                    k = 0;
//                    flg = false;
//                }
//            }
//        } else if (e.getsource() == repbtn) {
//            if (flg) {
//                textarea.replacerange(reptext, start, start + len);
//                flg = false;
//            }
//        }
//    }
//}
//
//// 字体格式
//class format extends jdialog implements actionlistener {
//
//    public static int style = 0; // 全局变量类型，默认值为0
//    public static int size = 16; // 全局变量字体大小，默认值为16
//    public static font font = new font("新宋体", style, size); // 全局变量字体，默认值为新宋体
//
//    jpanel pn = new jpanel();
//    jpanel okcelpn = new jpanel();
//    jpanel fontpn = new jpanel();
//    jpanel ptpn = new jpanel();
//    jlabel fontlabel = new jlabel("字体: ");
//    jlabel fontstylelabel = new jlabel(" 字形: ");
//    jlabel ptlabel = new jlabel("  磅值: ");
//    jbutton ok = new jbutton("确定");
//    jbutton cancel = new jbutton("取消");
//    graphicsenvironment e = graphicsenvironment.getlocalgraphicsenvironment();// 获取系统中可用的字体的名字
//    string[] fontname = e.getavailablefontfamilynames();// 获取系统中可用的字体的名字
//    string[] fonttype = { "常规", "倾斜", "粗体", "粗偏斜体" };
//    jlist fontlist = new jlist(fontname);
//    jlist fonttypelist = new jlist(fonttype);
//    jscrollpane fontscroll = new jscrollpane(fontlist);
//    jscrollpane fonttypescroll = new jscrollpane(fonttypelist);
//
//    jtextarea textarea;
//    spinnermodel spinnermodel = new spinnernumbermodel(size, // initial value
//            0, // min
//            100, // max
//            2 // step
//    );
//    jspinner spinner = new jspinner(spinnermodel);
//
//    public format(jtextarea textarea) {
//        this.textarea = textarea;
//        ok.addactionlistener(this);
//        cancel.addactionlistener(this);
//
//        pn.setlayout(new gridlayout(2, 1));
//        pn.add(fontpn);
//        pn.add(ptpn);
//
//        fontpn.add(fontlabel);
//        fontpn.add(fontscroll);
//        fontpn.add(fontstylelabel);
//        fontpn.add(fonttypescroll);
//
//        ptpn.add(ptlabel);
//        ptpn.add(spinner);
//
//        fontlist.setvisiblerowcount(5);
//        fontlist.setfixedcellwidth(60);
//        fontlist.setselectedindex(50);
//        fontlist.setselectedvalue(font.getfontname(), true);
//
//        fonttypelist.setvisiblerowcount(5);
//        fonttypelist.setselectedindex(style);
//        okcelpn.add(ok);
//        okcelpn.add(cancel);
//
//        okcelpn.setlayout(new flowlayout(flowlayout.right));
//
//        this.add(pn, borderlayout.center);
//        this.add(okcelpn, borderlayout.south);
//
//        this.settitle("字体");
//        this.pack();
//        this.setlocationrelativeto(null);
//        this.setresizable(false);
//        this.setvisible(true);
//        this.setdefaultcloseoperation(jframe.dispose_on_close);
//    }
//
//    public void actionperformed(actionevent e) {
//        if (e.getsource() == ok) {
//            system.out.println(fontlist.getselectedvalue());
//            style = this.type();
//            size = integer.parseint(spinner.getvalue().tostring());
//            font = new font((string) fontlist.getselectedvalue(), style, size);
//            textarea.setfont(font);
//            this.dispose();
//            system.out.println(type());
//        } else if (e.getsource() == cancel) {
//            this.dispose();
//        }
//    }
//
//    private int type() {
//        if (fonttypelist.getselectedvalue().equals("倾斜")) {
//            return 1;
//        } else if (fonttypelist.getselectedvalue().equals("粗体")) {
//            return 2;
//        } else if (fonttypelist.getselectedvalue().equals("粗偏斜体")) {
//            return 3;
//        } else
//            return 0;
//    }
//
//}
//
//class about extends jdialog {// 关于窗口
//
//    about() {
//        joptionpane.showmessagedialog(null, " 作者：cjb 版本：v1.5\n\n 联系：cjbi@outlook.com", "关于",
//                joptionpane.plain_message);
//    }
//}
